home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1995…tember: Reference Library / Dev.CD Sep 95 RL / Dev.CD Sep 95 RL.toast / mac / Technical Documentation / develop / develop Issue 15 code / Symmetry & Tiles / Tiler Code / Shell Files / events.c next >
Encoding:
C/C++ Source or Header  |  1994-05-27  |  5.7 KB  |  299 lines  |  [TEXT/KAHL]

  1. #include    "Shell.h"
  2.  
  3. extern Boolean            gDoneFlag;
  4. extern Rect                gDeskRect;
  5. extern MenuHandle        gShellMenuHandles[];
  6. extern long                gClickTime;
  7.  
  8. /*-------------------------------------------------------------------------
  9. DoEvent()            Standard Event Handler...
  10. -------------------------------------------------------------------------*/
  11.  
  12. DoEvent(EventRecord *Event)
  13. {
  14.     GrafPtr        oldport;
  15.     
  16.     switch(Event->what)
  17.     {
  18.         case activateEvt:
  19.             AppActivate((WindowPtr)Event->message, Event->modifiers & activeFlag);
  20.             break;
  21.                 
  22.         case updateEvt:
  23.             GetPort(&oldport);
  24.             SetPort((WindowPtr)Event->message);
  25.             BeginUpdate((WindowPtr)Event->message);
  26.             
  27.             AppUpdate(Event);
  28.             
  29.             EndUpdate((WindowPtr)Event->message);
  30.             SetPort(oldport);
  31.             break;
  32.  
  33.         case mouseDown:
  34.             DoMouse(Event);
  35.             gClickTime = Event->when;
  36.             break;
  37.             
  38.         case keyDown:
  39.             DoKey(Event);
  40.             break;
  41.         
  42.         case osEvt:
  43.             DoOS(Event);
  44.             break;
  45.         
  46.         case nullEvent:
  47.             AppIdle(Event);
  48.             break;
  49.     }
  50. }
  51.  
  52.  
  53. /*------------------------------------------------------------------------
  54. DoMouse()            Handles mousedown events...
  55. -------------------------------------------------------------------------*/
  56.  
  57. DoMouse(EventRecord *eventptr)
  58. {    
  59.     WindowPtr        whichWindptr;
  60.     Point            thePt;
  61.     long            mstuff;
  62.     short            part;
  63.     Boolean            doubleClick = false;
  64.  
  65.     
  66.     if((eventptr->when - gClickTime) <= GetDblTime())
  67.     {
  68.         doubleClick = true;
  69.     }
  70.     thePt = eventptr->where;
  71.     part = FindWindow(thePt, &whichWindptr);
  72.     switch(part)
  73.     {
  74.         case inDesk:
  75.             break;
  76.             
  77.         case inMenuBar:
  78.             AppAdjustMenus();
  79.             mstuff = MenuSelect(thePt);
  80.             DoMenus(mstuff);
  81.             break;
  82.             
  83.         case inSysWindow:
  84.             SystemClick(eventptr, whichWindptr);
  85.             break;
  86.         
  87.         case inContent:
  88.             if(whichWindptr != FrontWindow())
  89.                 SelectWindow(whichWindptr);
  90.             else
  91.             {
  92.                 SetPort(whichWindptr);
  93.                 GlobalToLocal(&thePt);
  94.                 AppClick(thePt, whichWindptr, doubleClick, eventptr);
  95.             }
  96.             break;
  97.             
  98.         case inDrag:
  99.             DragWindow(whichWindptr, thePt, &gDeskRect);
  100.             break;
  101.  
  102.         case inGrow:
  103.             AppGrowWindow(whichWindptr, thePt, &gDeskRect);
  104.             break;
  105.             
  106.         case inGoAway:
  107.             if(TrackGoAway(whichWindptr, thePt))
  108.             {
  109.                 AppClose();
  110.             }
  111.             break;
  112.             
  113.         case inZoomIn:
  114.         case inZoomOut:
  115.             if(TrackBox(whichWindptr, thePt, part))
  116.                 AppZoomWindow(whichWindptr, part);
  117.             break;
  118.     }
  119. }
  120.  
  121.  
  122. /*-----------------------------------------------------------------------
  123. DoKey()            Handles keypresses...
  124. ------------------------------------------------------------------------*/
  125.  
  126. DoKey(EventRecord *eventptr)
  127. {
  128.     char    key;
  129.     
  130.     key = (char)(eventptr->message);
  131.     if(eventptr->modifiers & cmdKey)
  132.     {
  133.         long        rslt;
  134.         
  135.         AppAdjustMenus();
  136.         rslt = DoMenus(MenuKey(key));
  137.         if(HiWord(rslt))
  138.             return;
  139.     }
  140. }
  141.     
  142. /*-----------------------------------------------------------------------
  143. DoOS()    Handles suspend and resume events, ignores mouse moved events
  144. ------------------------------------------------------------------------*/
  145.  
  146. DoOS(EventRecord *eventPtr)
  147. {
  148.     WindowPtr    wind;
  149.     
  150.     /* Get the high byte of the message. Inside Mac VI says it's the low byte, but
  151.     then goes on to say bits 24-31. Must be a typo... */
  152.     switch ((eventPtr->message >> 24) & 0x0FF) /* the logical AND is a safety measure,
  153.                                                 to kill any sign bits shifted in */
  154.     {
  155.         case suspendResumeMessage:
  156.             /* Suspend/resume is also an activate/deactivate. */
  157.             AppActivate(FrontWindow(), eventPtr->message & resumeFlag);
  158.             break;
  159.  
  160.         case mouseMovedMessage:
  161.             break;
  162.     }
  163. }
  164.     
  165.  
  166. /*-----------------------------------------------------------------------
  167. DoMenus()            Handles a menu selection...
  168. ------------------------------------------------------------------------*/
  169.  
  170. DoMenus(long mstuff)
  171. {
  172.     short            id, item;
  173.     
  174.     if(HiWord(mstuff) == 0)
  175.         return;
  176.  
  177.     id = HiWord(mstuff);
  178.     item = LoWord(mstuff);
  179.     switch(id)
  180.     {
  181.         case kAppleMenuID:
  182.             DoApple(item);
  183.             break;
  184.             
  185.         case kFileMenuID:
  186.             DoFile(item);
  187.             break;
  188.  
  189.         case kEditMenuID:
  190.             DoEdit(item);
  191.             break;
  192.  
  193.         default:
  194.             AppMenu(id, item);
  195.             break;
  196.     }
  197.     HiliteMenu(0);
  198. }
  199.  
  200. /*-----------------------------------------------------------------------
  201. DoApple()            Handles apple menu...
  202. ------------------------------------------------------------------------*/
  203.  
  204. DoApple(short item)
  205. {
  206.     Str255                name;
  207.  
  208.     switch(item)
  209.     {
  210.         case iAbout:
  211.             Alert(kAboutAlertID, nil);
  212.             break;
  213.         
  214.         default:
  215.             GetItem(gShellMenuHandles[kAppleMenu], item, name);
  216.             OpenDeskAcc(name);
  217.     }
  218. }
  219.             
  220. /*-----------------------------------------------------------------------
  221. DoFile()            Handles File menu...
  222. ------------------------------------------------------------------------*/
  223.     
  224. DoFile(short item)
  225. {
  226.     switch(item)
  227.     {
  228.         
  229.  
  230.         case iNew:        /* New... */
  231.             AppNew();
  232.             break;
  233.                         
  234.         case iOpen:   /* Open...  */
  235.             AppOpen();
  236.             break;
  237.  
  238.         case iClose:   /* Close...  */
  239.             AppClose();
  240.             break;
  241.  
  242.         case iSave:  /* Save... */
  243.             AppSave();
  244.             break;
  245.             
  246.         case iSaveAs:  /* Save As... */
  247.             AppSaveAs();
  248.             break;
  249.             
  250.         case iPageSetup:  /* Page Setup... */
  251.             AppPageSetup();
  252.             break;
  253.             
  254.         case iPrint:  /* Print... */
  255.             AppPrint();
  256.             break;
  257.             
  258.         case iQuit:  /* Quit */
  259.             gDoneFlag = AppQuit();
  260.             break;
  261.     }
  262. }
  263.  
  264. /*-----------------------------------------------------------------------
  265. DoEdit()            Handles Edit menu...
  266. ------------------------------------------------------------------------*/
  267.     
  268. DoEdit(short item)
  269. {
  270.     /* First call SystemEdit to let a DA do editing, if one is frontmost. We
  271.         pass it the item - 1 since the constants for the edit commands are zero-based */
  272.     if(SystemEdit(item - 1) == false)
  273.     {
  274.         /* The command is for the app since SystemEdit didn't handle it. */
  275.         switch(item)
  276.         {
  277.             case iUndo:
  278.                 AppUndo();
  279.                 break;
  280.     
  281.             case iCut:
  282.                 AppCut();
  283.                 break;
  284.                 
  285.             case iCopy:
  286.                 AppCopy();
  287.                 break;
  288.     
  289.             case iPaste:
  290.                 AppPaste();
  291.                 break;
  292.     
  293.             case iClear:
  294.                 AppClear();
  295.                 break;
  296.         }
  297.     }
  298. }
  299.